
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>不使用额外空间的情况下反转二叉树 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>不使用额外空间的情况下反转二叉树 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是“反转二叉树”操作？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">反转二叉树是指将树中每个节点的左右子树进行交换。这个过程会影响整个树的结构，使得原本在左侧的节点变为右侧，反之亦然。对于每个节点 N，其左子树将变成右子树，而右子树将变成左子树。</div>
          </div>
          <div class="card-source">来源: 反转二叉树的概念 -> 1、反转二叉树的定义</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">实现反转二叉树的两种主要操作方式是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">反转二叉树可以通过两种主要方式来实现：递归和迭代。递归方法通过函数调用处理每个节点；迭代方法则使用栈或队列，通过广度优先或深度优先的遍历方式来交换左右子树。</div>
          </div>
          <div class="card-source">来源: 反转二叉树的概念 -> 2、反转二叉树的操作方式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">使用递归方法反转二叉树的核心思想包含哪三个步骤？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">递归方法的核心思想包含三个步骤：1. 如果当前节点为空，直接返回。 2. 递归地反转当前节点的左子树和右子树。 3. 交换当前节点的左右子树。</div>
          </div>
          <div class="card-source">来源: 反转二叉树的思路 -> 1、递归思路</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">反转二叉树操作的时间复杂度和空间复杂度分别是多少？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">时间复杂度为 O(N)，其中 N 是节点的总数，因为每个节点都需要被访问一次。空间复杂度为 O(H)，其中 H 是二叉树的高度，这适用于递归（系统调用栈）和迭代（显式栈）两种实现。</div>
          </div>
          <div class="card-source">来源: 时间复杂度与空间复杂度分析</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">反转二叉树操作会改变树的高度吗？它主要会影响树的什么特性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">反转操作本身不会改变树的高度。但是，树的遍历顺序会发生变化，例如，前序遍历、后序遍历等都会受到反转操作的影响。</div>
          </div>
          <div class="card-source">来源: 反转二叉树的概念 -> 3、反转二叉树的特性</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">应用</div>
          <div class="card-question">除了作为算法面试题，反转二叉树还有哪些实际应用场景？请列举两个。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">应用</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">实际应用场景包括：1. 在图像处理中实现图像的镜像效果，通过反转代表像素结构的树来实现图像翻转。2. 在编译器中用于语法树和表达式树的操作，例如处理前缀和后缀表达式时进行运算重排。</div>
          </div>
          <div class="card-source">来源: 反转二叉树的应用场景</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">定义</div>
          <div class="card-question">根据文档，二叉搜索树（BST）的关键特性是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">定义</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">对于二叉搜索树中的每个节点，其左子树的所有节点值都小于该节点值，而右子树的所有节点值都大于该节点值。这个特性使得查找、插入和删除操作具有对数时间复杂度。</div>
          </div>
          <div class="card-source">来源: 二叉树的基本概念 -> 3、种类</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">使用迭代方法和栈来反转二叉树的实现步骤是怎样的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 创建一个栈并将根节点入栈。 2. 当栈不为空时，从栈中弹出一个节点。 3. 交换该节点的左右子树。 4. 将该节点非空的左子节点和右子节点分别入栈，以便后续处理。</div>
          </div>
          <div class="card-source">来源: 反转二叉树的思路 -> 2、迭代思路</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">递归实现反转二叉树时，其空间复杂度O(H)是如何产生的？在最坏情况下会达到多少？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">递归实现使用了系统调用栈来保存递归状态。调用栈的深度与树的高度相等，因此空间复杂度为 O(H)。在最坏情况下，即树完全不平衡呈现为一条链时，高度 H 可以达到节点总数 N，此时空间复杂度为 O(N)。</div>
          </div>
          <div class="card-source">来源: 时间复杂度与空间复杂度分析 -> 2、空间复杂度</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
